ã¿ã€ãã»ãŒããªããã°ã©ãã³ã°ãããããå¶åŸ¡ãããã«åäžããããšã©ãŒé²æ¢ãå®å šæ§ç¢ºä¿ããããŠç£æ¥ãå»çãèªåŸã·ã¹ãã ã«ãããäžççãªä¿¡é Œæ§åäžã«è²¢ç®ããããæ¢ããŸãã
ã¿ã€ãã»ãŒããªãããã£ã¯ã¹ïŒå ç¢ãªåå®è£ ã§ããããå¶åŸ¡ãåäžãããäžççãªä¿¡é Œæ§ã確ç«ãã
ãããã£ã¯ã¹ã®åéã¯ããã€ãŠãªãå€é©ãéããŠãããèªåŸã·ã¹ãã ã¯ç²Ÿå¯è£œé ãå€ç§æè¡ããç©æµãç°å¢ã¢ãã¿ãªã³ã°ã«è³ããŸã§ãç§ãã¡ã®ç掻ã®ããããåŽé¢ã«ãŸããŸãæ·±ãçµ±åãããŠããŸãããããããããè€éã§éèŠãªåœ¹å²ãæ ãã«ã€ããŠããã®æºãããªãä¿¡é Œæ§ãäºæž¬å¯èœãªåäœãããã³æ¬è³ªçãªå®å šæ§ãžã®èŠæ±ãæãéèŠã«ãªããŸããããããå¶åŸ¡ã·ã¹ãã ã«ãããåäžã®ãœãããŠã§ã¢ãšã©ãŒã¯ãé«äŸ¡ãªçç£åæ¢ããæ·±å»ãªèº«äœçå±å®³ããããã¯äººåœã®æå€±ã«è³ããŸã§ã壿» çãªçµæãæãå¯èœæ§ããããŸãããã®è€éãªç¶æ³ã«ãããŠãã¿ã€ãã»ãŒããã£ã¯ãå埩åããããä¿¡é Œæ§ãé«ããäžççã«ä¿¡çšãããããããã·ã¹ãã ãæ§ç¯ããããã®åºæ¬çãªãã©ãã€ã ãšããŠæµ®äžããŠããŸãã
ãã®å æ¬çãªã¬ã€ãã§ã¯ãã¿ã€ãã»ãŒããªããããå¶åŸ¡ã®ååãå®çšçãªå®è£ ãããã³ãã®èšãç¥ããªãã¡ãªããã«ã€ããŠè©³ããæãäžããŸããçŸä»£ãœãããŠã§ã¢å·¥åŠã®æ žå¿ã§ããå ç¢ãªåå®è£ ããäžè¬çãªããã°ã©ãã³ã°ãšã©ãŒãå€§å¹ ã«è»œæžããã³ãŒãã®ä¿å®æ§ãåäžãããæçµçã«äžçäžã®å€æ§ãªç°å¢ã§åäœããããããã®å®å šæ§ãšä¿¡é Œæ§ãã©ã®ããã«åŒ·åã§ããããæ¢ããŸãã
ã¿ã€ãã»ãŒããã£ã®åºç€ïŒãããäœã§ããããªããããã£ã¯ã¹ã«ãšã£ãŠéèŠãªã®ã
ãã®æ žå¿ã«ãããŠãã¿ã€ãã»ãŒããã£ã¯ãç°ãªãããŒã¿åãã©ã®ããã«äœ¿çšãããçžäºäœçšã§ãããã«ã€ããŠå³æ Œãªã«ãŒã«ã匷å¶ããããšã«ãããããã°ã©ãã³ã°ãšã©ãŒã鲿¢ãŸãã¯æ€åºããã®ã«åœ¹ç«ã€ããã°ã©ãã³ã°èšèªã®ç¹æ§ã§ããããã¯ãæäœãæ£ããã³ã³ããã¹ãã§æå¹ãªããŒã¿ã«å¯ŸããŠå®è¡ãããããŒã¿å€æãæŽåæ§ãç¶æããããšãä¿èšŒããããšã«ãããŸãã
ã¿ã€ãã»ãŒããã£ã®å®çŸ©ïŒéçã¢ãããŒããšåçã¢ãããŒã
ã¿ã€ãã»ãŒããã£ã¯ãäžè¬çã«2ã€ã®äž»èŠãªã¢ãããŒãã«åé¡ã§ããŸãã
- éç忀æ»ïŒããã¯ãããã°ã©ã ãå®è¡ãããåã®ã³ã³ãã€ã«æã«åãšã©ãŒãæ€åºãããæ¹æ³ã§ããC++ãJavaãRustãAdaãHaskellãªã©ã®èšèªã¯éçåä»ããæ¡çšããŠããŸããã³ã³ãã€ã©ã¯ã宣èšãããåã«åºã¥ããŠæœåšçãªäžäžèŽãç¡å¹ãªæäœãèŠåãã vigilant (èŠæå¿ã®åŒ·ã) ãªç£èŠåœ¹ãšããŠæ©èœããŸãããã®ã¢ãããŒãã¯ãããã°ã©ã ã®åãæ£ããããšã«é¢ãã匷åãªä¿èšŒãæäŸããéçºãµã€ã¯ã«ã®æ©ã段éã§åºç¯å²ã®ãšã©ãŒãææããŸãã
- åç忀æ»ïŒãã®ã¢ãããŒãã§ã¯ãããã°ã©ã ãå®è¡ãããŠããå®è¡æã«åãšã©ãŒãæ€åºãããŸããPythonãJavaScriptãRubyãªã©ã®èšèªã¯åçåä»ãã§ããããé«ãæè»æ§ãšããéãåæéçºãæäŸããŸãããåçåä»ãã¯ã蚺æãå°é£ãªå®è¡æãšã©ãŒã®ãªã¹ã¯ã䌎ããç¹ã«è€éãªã¢ããªã±ãŒã·ã§ã³ãé·æéå®è¡ãããã¢ããªã±ãŒã·ã§ã³ã§ã¯äºæããªãã·ã¹ãã é害ã«ã€ãªããå¯èœæ§ããããŸãã
ãããã£ã¯ã¹ã®ãããªå®å šæ§èŠæ±ã®é«ãã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã³ã³ãã€ã«æã®ä¿èšŒãæäŸããå®å šæ§ãæ©èœæ§ãæãªãå¯èœæ§ã®ããå®è¡æãšã©ãŒã®å¯èœæ§ãå€§å¹ ã«æžããèœåããããããéç忀æ»ãå§åçã«å¥œãŸããŸãã
ãããã£ã¯ã¹ã«ãããŠã¿ã€ãã»ãŒããã£ãäžå¯æ¬ ã§ããçç±ïŒã°ããŒãã«ãªèŠç¹
ãããã£ã¯ã¹ã«ãããå±éºæ§ã¯éåžžã«é«ãã§ããããããã¯ãã°ãã°ç©çç°å¢ã人éã貎éãªè³ç£ãšçžäºäœçšããŸããäºæããªãåäœã®åœ±é¿ã¯èšãç¥ããŸãããã¿ã€ãã»ãŒããã£ã¯ããããã®å€ãã®éèŠãªæžå¿µã«çŽæ¥å¯ŸåŠããŸãã
- å®å
šæ§èŠæ±ã®é«ãã¢ããªã±ãŒã·ã§ã³ïŒå£æ»
çãªé害ã®é²æ¢
æ£è ã«å€ç§æè¡ãè¡ãèªåŸæè¡ãããããå±éºç©ãæ±ãç£æ¥çšãããã¥ã¬ãŒã¿ãŒãè³ãããªåžè¡å°ãèµ°è¡ããèªåé転è»ãæ³åããŠã¿ãŠãã ããããããã®ã·ããªãªã§ã¯ããœãããŠã§ã¢ãšã©ãŒã«ããäºæããªãåäœã壿» çãªçµæãããããå¯èœæ§ããããŸããã¿ã€ãã»ãŒããã£ã¯ãé床ãæåŸ ãããå Žæã«ãžã§ã€ã³ãè§åºŠãæž¡ããããåæåãããŠããªãã»ã³ãµãŒã®èªã¿åãå€ã«å¯ŸããŠæäœã詊ã¿ãããããªã©ãå€ãã®çš®é¡ã®ãšã©ãŒãé²ãããã®å ç¢ãªã¡ã«ããºã ãæäŸããŸãããã®ã³ã³ãã€ã«ææ€èšŒã«ãããåœéçãªå®å šåºæºïŒå人çšããããã®å®å šã«é¢ããISO 13482ã黿°ã»é»åã»ããã°ã©ããã«é»åå®å šé¢é£ã·ã¹ãã ã®æ©èœå®å šã«é¢ããIEC 61508ãªã©ïŒã«æºæ ããæªæãæå®³ããŸãã¯éçšäžã®é害ã«ã€ãªããå¯èœæ§ã®ããå®è¡æé害ã®ãªã¹ã¯ãå€§å¹ ã«äœæžãããŸãã - ä¿¡é Œæ§ãšå
ç¢æ§ïŒã·ã¹ãã äºæž¬æ§ã®åäž
ä¿¡é Œæ§ã®é«ãããããã¯ãéçšæéãç°å¢ã®å€åã«é¢ä¿ãªãããã®ã¿ã¹ã¯ãäžè²«ããŠäºæž¬å¯èœã«å®è¡ããŸããã¿ã€ãã»ãŒããã£ã¯ãããŒã¿åãã·ã¹ãã å šäœã§äžè²«ããŠåŠçãããããšãä¿èšŒããããšã«ãããããã«è²¢ç®ããŸããããã«ãããææ§ããæé€ãããç¹å®ã®ãŸããªæ¡ä»¶äžã§ã®ã¿çŸããå¯èœæ§ã®ãã埮åŠãªãã°ã®å¯èœæ§ãäœæžãããŸãããã®å ç¢æ§ã¯ãé éå°ãã¢ã¯ã»ã¹äžå¯èœãªå Žæã«é åãããããããããŸãã¯äžçäžã®ç£æ¥ç°å¢ã§ç¶ç¶çã«çšŒåããããããã«ãšã£ãŠäžå¯æ¬ ã§ãã - ä¿å®æ§ãšã¹ã±ãŒã©ããªãã£ïŒã°ããŒãã«ããŒã ã«ãããè€éæ§ã®ç®¡ç
çŸä»£ã®ããããã·ã¹ãã ã¯ä¿¡ããããªãã»ã©è€éã§ããããã°ãã°ç°ãªã倧éžã«ãŸããã忣ããŒã ã«ãã£ãŠéçºãããæ°åããæ°çŸäžè¡ã®ã³ãŒããå«ã¿ãŸããå³å¯ã«åä»ããããèšèªã¯ãç°ãªãã¢ãžã¥ãŒã«ãšã³ã³ããŒãã³ãéã®æç¢ºãªå¥çŽã匷å¶ããŸããéçºè ãåå®çŸ©ã倿Žãããšãã³ã³ãã€ã©ã¯ã³ãŒãããŒã¹ã®ãã¹ãŠã®åœ±é¿ãåããéšåãçŽã¡ã«ãã©ã°ä»ãããäžè²«æ§ãä¿èšŒããŸããããã«ãããã°ããŒãã«ããŒã ãæ°ãããã°ãå°å ¥ããããšãªããå€§èŠæš¡ãªã³ãŒãããŒã¹ãçè§£ããªãã¡ã¯ã¿ãªã³ã°ããããã°ãããã³æ¡åŒµããããšãå€§å¹ ã«å®¹æã«ãªããå ±åéçºãä¿é²ããæè¡çè² åµãåæžããŸãã - éçºè
ã®çç£æ§ïŒæ©æã®ãšã©ãŒææãšä¿¡é Œæ§ã®éžæ
ã³ã³ãã€ã«æã«ãšã©ãŒãææããããšã¯ããã¹ãäžããããã¯ããã«æªãããšã«å±éåŸã«æ€åºããããããã¯ããã«è²»çšããããããæéãããããŸãããã¿ã€ãã»ãŒããã£ã¯éçºè ã«å³åº§ã«ãã£ãŒãããã¯ãæäŸããæ£ãã䜿çšãã¿ãŒã³ãžãšå°ãããã¹ãç°å¢ã«å°éããåã«ããããçš®é¡ã®ãã°ã鲿¢ããŸããããã«ããããšã³ãžãã¢ã¯æ©èœã®å®è£ ãšããã©ãŒãã³ã¹ã®æé©åã«éäžã§ããæœåšçãªãšã©ãŒã®å€§éšåãåã·ã¹ãã ã«ãã£ãŠãã§ã«ä¿è·ãããŠããããšãç¥ã£ãŠããŸãã - ã°ããŒãã«ãªã³ã©ãã¬ãŒã·ã§ã³ãšçžäºéçšæ§ïŒæšæºåãããã€ã³ã¿ãŒãã§ãŒã¹
ã°ããŒãã«ã«çžäºæ¥ç¶ããããããã£ã¯ã¹æ¥çã§ã¯ãã³ã³ããŒãã³ããšãœãããŠã§ã¢ã¢ãžã¥ãŒã«ã¯ãäžçäžã®ç°ãªããã³ããŒãç ç©¶æ©é¢ã«ãã£ãŠéçºãããããšããããããŸããã¿ã€ãã»ãŒããªã€ã³ã¿ãŒãã§ãŒã¹ã¯ããããã®ã³ã³ããŒãã³ããã©ã®ããã«çžäºäœçšãããã«ã€ããŠæç¢ºãªå¥çŽãæäŸããææ§ããæžãããã·ãŒã ã¬ã¹ãªçµ±åãä¿é²ããŸããAPIããã®å ¥åãšåºåã®åãæ£ç¢ºã«å®çŸ©ãããšã倿§ãªèæ¯ãæã€éçºè ã¯ãããŒã¿ãæåŸ ã©ããã«äº€æãããããšãç¥ããããé«ãä¿¡é Œæ§ã§ã³ã³ããŒãã³ããçµ±åã§ããŸãã - èŠå¶éµå®ïŒå³æ Œãªå®å
šåºæºãžã®å¯Ÿå¿
å»çæ©åšãèªåŸèŒžéãªã©ãå€ãã®å®å šæ§èŠæ±ã®é«ãã¢ããªã±ãŒã·ã§ã³ã§ã¯ã峿 ŒãªèŠå¶éµå®ã矩åä»ããããŠããŸããå ç¢ãªåã·ã¹ãã ã¯ããœãããŠã§ã¢ãæå³ãããšããã«åäœããããšã®æ€èšŒå¯èœãªä¿èšŒå±€ãæäŸããŸããããŒã¿æŽåæ§ãšæäœã®æå¹æ§ã«é¢ããã³ã³ãã€ã«æã®ä¿èšŒãå®èšŒããèœåã¯ãäžççãªèªèšŒæ©é¢ã®å³ããèŠä»¶ãæºããäžã§å€§ããªå©ç¹ãšãªããŸãã
ã¿ã€ãã»ãŒããªããããå¶åŸ¡ã®å®çšçãªå®è£
ã¿ã€ãã»ãŒããªãããã£ã¯ã¹ãå®çŸããã«ã¯ãããã°ã©ãã³ã°èšèªã®æ éãªéžæãæ³šææ·±ãã¢ãŒããã¯ãã£èšèšãããã³èšèªæ©èœã®å¹æçãªæŽ»çšãå¿ èŠã§ãã
é©åãªããã°ã©ãã³ã°èšèªã®éžæ
ããã°ã©ãã³ã°èšèªã®éžæã¯ãã¿ã€ãã»ãŒããªããããå¶åŸ¡ãå®è£ ããããã®åºç€ãšãªããŸããC++ã¯é·å¹Žãããã£ã¯ã¹ã«ãããŠäž»èŠãªèšèªã§ããããRustã®ãããªæ°ããèšèªãAdaã®ãããªç¢ºç«ãããèšèªã¯ãã¿ã€ãã»ãŒããã£ã«é¢ããŠé åçãªå©ç¹ãæäŸããŸãã
- å³å¯ã«åä»ããããèšèªïŒ
- RustïŒãããã£ã¯ã¹ã«ãããŠå€§ããªæ³šç®ãéããŠããRustã¯ãç¬èªã®æææš©ãšåçšã·ã¹ãã ã«ãã£ãŠåŒ·å¶ããããã¬ããŒãžã³ã¬ã¯ã¿ãªãã§ã®ã³ã³ãã€ã«æã¡ã¢ãªå®å
šæ§ãé«ãè©äŸ¡ãããŠããŸããããã«ãããC/C++ã§ãšã©ãŒã®æªåé«ãåå ã§ãããã«ãã€ã³ã¿ã®éåç
§ãããŒã¿ç«¶åããããã¡ãªãŒããŒãããŒãªã©ãããããçš®é¡ã®ãã°ã鲿¢ããŸããRustã®`Option
`ãš`Result `åæåã¯ããã«å€ãšãšã©ãŒã®æç€ºçãªåŠçã匷å¶ããå®è¡æãããã¯ãé²ããŸãããã®åŒ·åãªåã·ã¹ãã ãšãã¬ã€ãããŒã¹ã®ãžã§ããªã¯ã¹ã¯ãéåžžã«å ç¢ã§åå©çšå¯èœãªã³ãŒããå¯èœã«ããŸãã - AdaïŒæŽå²çã«èªç©ºå®å®ãé²è¡ãééã·ã¹ãã ã§äœ¿çšãããŠããAdaã¯ãé«ä¿¡é Œæ§ãšå®å šæ§èŠæ±ã®é«ãã¢ããªã±ãŒã·ã§ã³åãã«ç¹å¥ã«èšèšãããŠããŸãããã®åã·ã¹ãã ã¯éåžžã«å³æ Œã§ãããæ£ç¢ºãªç¯å²å¶çŽã匷åãªåä»ããããã³äŸå€ã®æç€ºçãªåŠçããµããŒãããŠããŸããAdaã®èšèšã¯ä¿¡é Œæ§ãšæ£ç¢ºæ§ãåªå ããŠããã倱æãèš±ãããªãã·ã¹ãã ã«ãšã£ãŠåŒ·åãªéžæè¢ãšãªã£ãŠããŸãã
- C++ïŒãã³ãã¬ãŒãã`const`æ£åœæ§ãRAIIïŒResource Acquisition Is InitializationïŒãã¹ããŒããã€ã³ã¿ãªã©ã®æ©èœãåããC++ã¯ãããªãã®ã¿ã€ãã»ãŒããã£ãå¯èœã«ããŸãããã ããC++ã§å ç¢ãªã¿ã€ãã»ãŒããã£ãå®çŸããã«ã¯ãæ³šææ·±ãããã°ã©ãã³ã°å®è·µãšãã®ãã¥ã¢ã³ã¹ã®æ·±ãçè§£ãå¿ èŠã§ãããæ³šæããŠäœ¿çšããªããšå®å šã§ãªãæäœãå¯èœã«ãªããŸããã¢ãã³C++ïŒC++11以éïŒã¯ãããå®å šã§è¡šçŸåè±ããªã³ãŒããæžãããã®ããå€ãã®ããŒã«ãæäŸããŸãã
- Haskell/OCamlïŒãããã®é¢æ°åããã°ã©ãã³ã°èšèªã¯ã代æ°çããŒã¿åãåæšè«ã®ãããªé«åºŠãªæŠå¿µãç¹åŸŽãšããããšãå€ããéåžžã«åŒ·åã§è¡šçŸåè±ããªåã·ã¹ãã ãæäŸããŸããå®è¡æã®ç¹æ§ãç¹å®ã®ãšã³ã·ã¹ãã ãµããŒãã®ãããçµã¿èŸŒã¿ãããã£ã¯ã¹ã§ã¯ããŸãäžè¬çã§ã¯ãããŸãããããã®äžå€æ§ãšåŒ·åãªåä»ãã®ååã¯ãããå®å šãªèšèšãã¿ãŒã³ãåºæ¿ããããšãã§ããŸãã
- RustïŒãããã£ã¯ã¹ã«ãããŠå€§ããªæ³šç®ãéããŠããRustã¯ãç¬èªã®æææš©ãšåçšã·ã¹ãã ã«ãã£ãŠåŒ·å¶ããããã¬ããŒãžã³ã¬ã¯ã¿ãªãã§ã®ã³ã³ãã€ã«æã¡ã¢ãªå®å
šæ§ãé«ãè©äŸ¡ãããŠããŸããããã«ãããC/C++ã§ãšã©ãŒã®æªåé«ãåå ã§ãããã«ãã€ã³ã¿ã®éåç
§ãããŒã¿ç«¶åããããã¡ãªãŒããŒãããŒãªã©ãããããçš®é¡ã®ãã°ã鲿¢ããŸããRustã®`Option
- ãããã£ã¯ã¹ã«ãããéçåä»ã vs. åçåä»ãïŒ
Pythonã®ãããªåçèšèªã¯ãè¿ éãªãããã¿ã€ãã³ã°ãé«ã¬ãã«å¶åŸ¡ãAI/MLã³ã³ããŒãã³ããã¹ã¯ãªããã£ã³ã°ã«ã¯åªããŠããŸãããäœã¬ãã«ã®å®å šæ§èŠæ±ã®é«ãããããå¶åŸ¡ã«ã¯é倧ãªãªã¹ã¯ããããããŸããã³ã³ãã€ã«æã®åãã§ãã¯ããªãããã埮åŠãªãšã©ãŒãç¹å®ã®å®è¡ãã¹ã§ããçŸãããäºæž¬äžå¯èœãªåäœã«ã€ãªããå¯èœæ§ããããŸããã³ã¢å¶åŸ¡ã«ãŒããéä¿¡ã€ã³ã¿ãŒãã§ãŒã¹ãå®å šç£èŠã«ã¯ãéçåä»ãèšèªãå¿ èŠãªä¿èšŒãæäŸããŸãã
ã¿ã€ãã»ãŒããªã€ã³ã¿ãŒãã§ãŒã¹ãšAPIã®èšèš
èšèªã®éžæãè¶ ããŠãåã®ææ ®æ·±ãèšèšèªäœãéèŠã§ããç®æšã¯ãç¡å¹ãªç¶æ ã衚çŸäžå¯èœã«ããç¡å¹ãªæäœãã³ã³ãã€ã«æã«äžå¯èœã«ããããšã§ãã
- ãã¡ã€ã³åºæã®åïŒãNewtypeããã¿ãŒã³ïŒïŒãã¹ãŠã«`float`ã`int`ã®ãããªããªããã£ãåã䜿çšãã代ããã«ãç¹å®ã®ãã¡ã€ã³æŠå¿µã衚ãã«ã¹ã¿ã åãäœæããŸããããšãã°ãããããã®äœçœ®ã«çã®æµ®åå°æ°ç¹æ°ãæž¡ã代ããã«ã`PositionX`ã`PositionY`ã`JointAngle`ã`Velocity`ã`Acceleration`ããŸãã¯`Duration`ã®ãããªåãäœæããŸãã
// BAD: åäœãåãç°¡åã«æ··åãã
float x = 10.0; // ããã¯ã¡ãŒãã«ãã»ã³ãã¡ãŒãã«ããã¯ã»ã«ïŒ
float angle = 1.57; // ã©ãžã¢ã³ãŸãã¯åºŠïŒ
// GOOD: æç€ºçãªåã誀ã£ã䜿çšã鲿¢ãã
struct Meter(f64);
struct Radian(f64);
struct Velocity(MeterPerSecond);
struct JointAngle(Radian);
let robot_pos_x = Meter(10.0);
let motor_angle = JointAngle(Radian(1.57));
ãã®ã¢ãããŒãã«ãããã³ã³ãã€ã«æã«`Meter`ã`Radian`ã«èª€ã£ãŠè¿œå ãããã`JointAngle`ãæåŸ ãããå Žæã«`Velocity`ãæž¡ãããããããšãäžå¯èœã«ãªããããã«ããåäœãæå³è«çãªãšã©ãŒã®ã¯ã©ã¹å šäœãé²ããŸãã - åäœç³»ãšéã©ã€ãã©ãªïŒãã¡ã€ã³åºæã®åãæ¡åŒµããŠåäœèªèãå«ããŸããããŸããŸãªèšèªã«ã©ã€ãã©ãªãååšãïŒC++ã®`boost::units`ãRustã®`uom`ãªã©ïŒãåãç©çåäœãä¿æã§ããããã«ããããšã§ã次å çã«äžè²«æ§ã®ããæäœã®ã¿ãèš±å¯ãããããã«ããŸããããšãã°ãã¡ãŒãã«ãç§ã«è¿œå ãããšã³ã³ãã€ã«æãšã©ãŒã«ãªããŸãã
- ç¶æ æ©æ¢°ãšåæåïŒããããã®åäœã¢ãŒããç¶æ ã匷åãªåæåã代æ°çããŒã¿åã䜿çšããŠè¡šçŸããŸããããã«ããããããããç¡å¹ãªç¶æ ãæªå®çŸ©ã®ç¶æ ã«ãªãã®ãé²ããŸããããšãã°ãããããã¯`Initialized`ã`Moving`ã`Stopped`ã`EmergencyStop`ãªã©ã®ç¶æ ãæã€ããšãã§ããŸããåã·ã¹ãã ã¯ãç¹å®ã®æäœãç¹å®ã®ç¶æ ã§ã®ã¿æå¹ã§ããããšã匷å¶ã§ããŸãïŒäŸïŒ`start_motion`ã¯`Stopped`ãŸãã¯`Initialized`ããã®ã¿åŒã³åºãå¯èœïŒã
- ã¿ã€ãã»ãŒããã£ã«ãããªãœãŒã¹ç®¡çïŒRAIIãæææš©ïŒïŒéèŠãªãªãœãŒã¹ïŒã¡ã¢ãªããã¡ã€ã«ãã³ãã«ããããã¯ãŒã¯æ¥ç¶ããã¥ãŒããã¯ã¹ïŒãæ£ããååŸããã³è§£æŸãããããšãä¿èšŒããŸããRAIIãåããC++ãæææš©ã·ã¹ãã ãåããRustã®ãããªèšèªã¯ãåã·ã¹ãã ã䜿çšããŠãªãœãŒã¹ã®å®å šæ§ãä¿èšŒããŸããããšãã°ãRustã®ãã¥ãŒããã¯ã¹ã¬ãŒããªããžã§ã¯ãã¯ãã¹ã³ãŒãã®æéäžããã¯ãä¿æãããã¹ã³ãŒããçµäºãããšèªåçã«è§£æŸãããããšãä¿èšŒãã䞊è¡ã·ã¹ãã ã§äžè¬çãªãããããã¯ã·ããªãªãé²ããŸãã
é«åºŠãªåã·ã¹ãã æ©èœã®æŽ»çš
çŸä»£ã®èšèªã¯ãã¿ã€ãã»ãŒããã£ãããã«åŒ·åãã匷åãªæ©èœãæäŸããŸãã
- ãžã§ããªã¯ã¹ãšå€æ æ§ïŒã¿ã€ãã»ãŒããã£ãç¶æããªãããããŸããŸãªåã§æ©èœããåå©çšå¯èœãªã¢ã«ãŽãªãºã ãšããŒã¿æ§é ã®èšè¿°ãå¯èœã«ããŸããããã¯ãç°ãªãã»ã³ãµãŒã¿ã€ããã¢ã¯ãã¥ãšãŒã¿ãŒããŸãã¯ããŒã¿åœ¢åŒãåäžã«åŠçããå¿ èŠããããæè»ã§ã¢ãžã¥ãŒã«åŒã®ãããããã¬ãŒã ã¯ãŒã¯ãæ§ç¯ããããã«äžå¯æ¬ ã§ãã
- Const-Correctness (C++)ïŒC++ã§`const`ããŒã¯ãŒãã䜿çšãããšãäžå€æ§ã匷å¶ããã®ã«åœ¹ç«ã¡ã颿°ãã¡ãœããã«ãã£ãŠå€æŽãããã¹ãã§ãªãããŒã¿ã倿Žãããªãããšãä¿èšŒããŸããããã¯ã䞊è¡ã·ã¹ãã ã§å ±æãããããŒã¿ããæ§æãã©ã¡ãŒã¿ã®æŽåæ§ãç¶æããããã«äžå¯æ¬ ã§ãã
- ãã¬ã€ãã·ã¹ãã (Rust)ïŒãã¬ã€ãã¯ãåãå®è£ ã§ããå ±éã®åäœãå®çŸ©ããŸããããã«ãããã³ã³ãã€ã«æã®åãã§ãã¯ãç¶æããªãããç°ãªãå ·äœçãªåãæœè±¡åã§ããŸããããšãã°ã`MotorController`ãã¬ã€ãã¯ã`set_speed()`ã`get_position()`ã®ãããªã¡ãœãããå®çŸ©ã§ããç°ãªãã¢ãŒã¿ãŒå®è£ ïŒäŸïŒDCã¢ãŒã¿ãŒãã¹ãããã³ã°ã¢ãŒã¿ãŒïŒãããã«åŸãå¿ èŠããããæè»ã§ãããªããã¿ã€ãã»ãŒããªæ¡åŒµãã€ã³ããæäŸããŸãã
- äŸåå (äžçŽ)ïŒçŸåšã®ç£æ¥çšãããã£ã¯ã¹ã§ã¯äž»æµã§ã¯ãããŸããããäŸååãæã€èšèªïŒäŸïŒIdrisãAgdaïŒã¯ãåãå€ã«äŸåããããšãå¯èœã«ããŸããããã«ãããé åã®é·ããæ€èšŒããããåææ¡ä»¶ãæºããããåŸã«ã®ã¿ç¹å®ã®æäœãçºçããããšãä¿èšŒããããããªã©ãããã«åŒ·åãªã³ã³ãã€ã«æã®ä¿èšŒãå¯èœã«ãªãããã¹ãŠã³ã³ãã€ã«æã«ãã§ãã¯ãããŸããããã¯ãå°æ¥ã®è¶ é«ä¿¡é Œæ§ã·ã¹ãã ã«ãããã¿ã€ãã»ãŒããã£ã®æå 端ã衚ããŠããŸãã
ã¿ã€ãã»ãŒããªãããã£ã¯ã¹å°å ¥ã«ããã課é¡ãšèæ ®äºé
ã¿ã€ãã»ãŒããã£ã®ã¡ãªããã¯é åçã§ãããç¹ã«ç¢ºç«ãããæ £è¡ãæã€çµç¹ã«ãšã£ãŠã¯ããã®æ¡çšã«ã¯èª²é¡ããªãããã§ã¯ãããŸããã
åŠç¿æ²ç·
åçã«åä»ããããèšèªãå³å¯ã§ãªãC++ã®ã€ãã£ãªã ã«æ £ããŠããéçºè ã¯ãRustãAdaã®ãããªéåžžã«ã¿ã€ãã»ãŒããªèšèªãžã®æåã®ç§»è¡ãé£ãããšæãããããããŸããããã峿 Œãªã³ã³ãã€ã©ãæç€ºçãªãšã©ãŒåŠçïŒäŸïŒ`Option`ãš`Result`ïŒãããã³ã¡ã¢ãªå®å šæ§ã®æŠå¿µã¯ãèãæ¹ã®è»¢æãšãã¬ãŒãã³ã°ãžã®å€å€§ãªæè³ãå¿ èŠãšããŸããããããäžåºŠç¿åŸããã°ããããã®ãã¿ãŒã³ã¯ããå ç¢ã§çè§£ããããã³ãŒãã«ã€ãªããããšããããããŸãã
ããã©ãŒãã³ã¹ã®ãªãŒããŒãããïŒèªèãããŠãããã®ãšå®éã®ãã®ã®æ¯èŒïŒ
ã¿ã€ãã»ãŒããªèšèªã¯æ¬è³ªçã«ããã©ãŒãã³ã¹ã®ãªãŒããŒããããå°å ¥ãããšèªèãã人ãããŸããã³ã³ãã€ã«æéã¯ïŒåºç¯ãªéçè§£æã®ããã«ïŒé·ããªãããšããããŸãããRustãæé©åãããC++ã®ãããªèšèªã®å®è¡æããã©ãŒãã³ã¹ã¯ãã³ã³ãã€ã©ãåæ å ±ãç©æ¥µçãªæé©åã«å©çšã§ãããããCã«å¹æµãããããããããåªããŠããããšããããããŸããããªãŒããŒããããã¯äž»ã«å®è¡æãšã©ãŒåŠçãšãããã°ããã³ã³ãã€ã«ææ€èšŒãžãšç§»è¡ãããããå¹ççã§ä¿¡é Œæ§ã®é«ãå®è¡ã«ã€ãªãããŸãã
ãšã³ã·ã¹ãã ã®æç床ãšçµ±å
ãããã£ã¯ã¹ãšã³ã·ã¹ãã ã¯ãç¹ã«ROSïŒRobot Operating SystemïŒã®ãããªãã¬ãŒã ã¯ãŒã¯ãšãšãã«ãæŽå²çã«C++ãšPythonã«å€§ããäŸåããŠããŸãããæ°ããã¿ã€ãã»ãŒããªèšèªã¯å¢ããå¢ããŠããŸãããç¹å®ã®ãããã£ã¯ã¹ããŒããŠã§ã¢ãããã«ãŠã§ã¢ã«é¢ããã©ã€ãã©ãªãµããŒããããŒã«ãã³ãã¥ããã£ãªãœãŒã¹ã¯ã確ç«ããããªãã·ã§ã³ãšæ¯èŒããŠãŸã æç床ãäœãå¯èœæ§ããããŸããæ¢åã®C++/Python ROSã³ãŒãããŒã¹ã«æ°ããã¿ã€ãã»ãŒããªèšèªãçµ±åããã«ã¯ãæ éãªèšç»ãšæœåšçãªããªããžã³ã°ã¡ã«ããºã ãå¿ èŠã§ãã
å³å¯æ§ãšä¿ææ§ã®ãã©ã³ã¹
ç ç©¶ããã³è¿ éãªãããã¿ã€ãã³ã°ç°å¢ã§ã¯ãåã·ã¹ãã ã®å³å¯æ§ãå¶çŽã«æããããæåã®å®éšãé ãããå¯èœæ§ããããŸããéèŠãªã³ã³ããŒãã³ãã«å¯Ÿãã峿 Œãªå匷å¶ãšãééèŠã§å®éšçãªã¢ãžã¥ãŒã«ã«å¯Ÿããããé«ãæè»æ§ã®éã§é©åãªãã©ã³ã¹ãèŠã€ããããšãéèŠãªèª²é¡ã§ããããã§ã¯æ®µéçãªæ¡çšæŠç¥ã圹ç«ã¡ãŸãã
ã¿ã€ãã»ãŒããªããããå¶åŸ¡ãå®è£ ããããã®ãã¹ããã©ã¯ãã£ã¹
ã¿ã€ãã»ãŒããã£ããããã£ã¯ã¹éçºã¯ãŒã¯ãããŒã«æåè£ã«çµ±åããã«ã¯ã次ã®å®è¡å¯èœãªæŽå¯ãèæ ®ããŠãã ããã
- æ©æã«éå§ïŒèšè𿮵éããçµ±åãã
ã¿ã€ãã»ãŒããã£ãæå€§éã«æŽ»çšããæã广çãªæ¹æ³ã¯ãã·ã¹ãã ã®èšè𿮵éãããããåãå ¥ããããšã§ããå€éã®ã³ãŒããèšè¿°ããåã«ããã¹ãŠã®éèŠãªããŒã¿æ§é ãã€ã³ã¿ãŒãã§ãŒã¹ãããã³ç¶æ 衚çŸã«å¯ŸããŠæ£ç¢ºãªåãå®çŸ©ããŸãããã®ãåé§åéçºãã¢ãããŒãã¯ãèšèšäžã®æ¬ é¥ãææ§ããæ©æã«ææããã®ã«åœ¹ç«ã¡ãŸãã - 段éçãªæ¡çšïŒã¿ã€ãã»ãŒããªã³ã³ããŒãã³ããåŸã
ã«å°å
¥ãã
æ¢åã®ãããžã§ã¯ãã®å Žåãå®å šã«æžãæããããšã¯å€ãã®å Žåå®è¡äžå¯èœã§ãã代ããã«ãã¿ã€ãã»ãŒããã£ãæã倧ããªã¡ãªãããããããéèŠãªã¢ãžã¥ãŒã«ãæ°æ©èœïŒäŸïŒã¢ãŒã¿ãŒå¶åŸ¡ãã©ã€ããŒãå®å šç£èŠã·ã¹ãã ãããã»ã¹ééä¿¡ã€ã³ã¿ãŒãã§ãŒã¹ïŒãç¹å®ããŸãããããã®ã³ã³ããŒãã³ããã¿ã€ãã»ãŒããªååãšèšèªã䜿çšããŠéçºããã¬ã¬ã·ãŒã³ãŒããšçžäºäœçšããããã®å ç¢ã§åãã§ãã¯ãããã€ã³ã¿ãŒãã§ãŒã¹ãäœæããŸãã - ããŒã ã®æè²ïŒãã¬ãŒãã³ã°ãšã¹ãã«éçºã«æè³ãã
ã¿ã€ãã»ãŒããªå®è·µã®æ¡çšã®æåã¯ããšã³ãžãã¢ãªã³ã°ããŒã ã®å°éç¥èã«å€§ããäŸåããŸããæ°ããèšèªããã©ãã€ã ã匷åãªåã·ã¹ãã ã«é¢é£ãããã¹ããã©ã¯ãã£ã¹ãéçºè ãåŠã¶ããã®ãã¬ãŒãã³ã°ããã°ã©ã ãã¯ãŒã¯ã·ã§ããã«æè³ãããªãœãŒã¹ãæäŸããŸããåŠç¿ãšç¶ç¶çãªæ¹åã®æåãè²ã¿ãŸãã - ããŒã«ã®æŽ»çšïŒéçè§£æããªã³ã¿ãŒãIDEãµããŒã
ã³ã³ãã€ã©ãè¶ ããŠãé«åºŠãªããŒã«ã掻çšããŸããéçè§£æããŒã«ã¯ãåã·ã¹ãã ã ãã§ã¯ææã§ããªãæœåšçãªåé¡ãç¹å®ã§ããŸãããªã³ã¿ãŒã¯ã³ãŒãã£ã³ã°æšæºãšã¹ã¿ã€ã«ã匷å¶ããã³ãŒãå質ãããã«åäžãããŸããææ°ã®çµ±åéçºç°å¢ïŒIDEïŒã¯ãã¿ã€ãã»ãŒããªèšèªã«å¯ŸããåªãããµããŒããæäŸããã€ã³ããªãžã§ã³ããªèªåè£å®ããªãã¡ã¯ã¿ãªã³ã°æ¯æŽãããã³åãšã©ãŒã«é¢ããå³åº§ã®ãã£ãŒãããã¯ãæäŸããŸãã - æç¢ºãªåå¥çŽã®å®çŸ©ïŒæåŸ
å€ãææžåãã
匷åãªåã·ã¹ãã ããã£ãŠããåãšã€ã³ã¿ãŒãã§ãŒã¹ã®æå³ãšæåŸ ãããåäœãæç¢ºã«ææžåããŠãã ãããã«ã¹ã¿ã åã®ã»ãã³ãã£ã¯ã¹ããããã匷å¶ããå¶çŽãããã³ããããç¶æããç¹å®ã®äžå€æ¡ä»¶ã説æããŸããããã¯ãç°ãªãã¿ã€ã ãŸãŒã³ãæåçèæ¯ãè¶ ããŠååããã°ããŒãã«ããŒã ã«ãšã£ãŠç¹ã«éèŠã§ãã - 培åºçãªãã¹ãïŒã¿ã€ãã»ãŒããã£ããã£ãŠãïŒïŒ
ã¿ã€ãã»ãŒããã£ã¯ãšã©ãŒã®ã¯ã©ã¹å šäœãåçã«æžãããŸãããè«ççãªãã°ãäžæ£ç¢ºãªã¢ã«ãŽãªãºã ã®å®è£ ãæé€ãããã®ã§ã¯ãããŸãããå æ¬çãªåäœãã¹ããçµ±åãã¹ããã·ã¹ãã ãã¹ãã¯åŒãç¶ãäžå¯æ¬ ã§ããã¿ã€ãã»ãŒããã£ã¯ãã匷åãªåºç€ãæäŸãããã¹ããåºæ¬çãªããŒã¿æŽåæ§ã§ã¯ãªããããžãã¹ããžãã¯ãšã·ã¹ãã åäœã®æ€èšŒã«éäžã§ããããã«ããŸãã - ã°ããŒãã«æšæºãšã³ã©ãã¬ãŒã·ã§ã³ïŒ
ããããã€ã³ã¿ãŒãã§ãŒã¹ãšéä¿¡ãããã³ã«ã«é¢ãããªãŒãã³ã§ã¿ã€ãã»ãŒããªæšæºã®éçºã«åå ããæšé²ããŸããã°ããŒãã«ãªåãçµã¿ã«è²¢ç®ããããšã¯ãçžäºéçšæ§ã確ä¿ããã€ãããŒã·ã§ã³ãä¿é²ããæ¥çå šäœã®ãããã£ã¯ã¹ã®å®å šæ§ãšä¿¡é Œæ§ãåäžãããã®ã«åœ¹ç«ã¡ãŸãã
ã¿ã€ãã»ãŒããªãããã£ã¯ã¹ã®æªæ¥
ãããã£ã¯ã¹ã®è»éã¯ããŸããŸãè€éã§èªåŸçããã€å®å šæ§èŠæ±ã®é«ãã¢ããªã±ãŒã·ã§ã³ãžãšåãã£ãŠããŸãããã®æªæ¥ã«ãããŠãã¿ã€ãã»ãŒããã£ã¯ããããšäŸ¿å©ããªãã®ã§ã¯ãªããåºæ¬çãªèŠä»¶ãšãªãã§ãããã
- ææ°ã®ã¿ã€ãã»ãŒããªèšèªã®æ¡çšå¢å ïŒç¹ã«èªåé転ãé«åºŠãªç£æ¥ãªãŒãã¡ãŒã·ã§ã³ãæè¡çšãããã£ã¯ã¹ãªã©ã®åéã§ãæ°ããé«ä¿èšŒããããã·ã¹ãã åãã«Rustã®ãããªèšèªãžã®ç§»è¡ãé²ããšäºæ³ãããŸãã
- åã·ã¹ãã ã®é²åïŒåœ¢åŒæ€èšŒææ³ãçµã¿èŸŒãã ãã®ãå«ãããã匷åãªåã·ã¹ãã ã«é¢ããç ç©¶ãç¶ç¶ãããŠãããããã°ã©ã ã®æ£ç¢ºæ§ãšå®å šæ§ã«ã€ããŠããã«åŒ·åã§æ°åŠçã«èšŒæå¯èœãªä¿èšŒãå¯èœã«ããŸããããã«ãããéèŠãªããããã®åäœãåãã§ãã¯ãããã ãã§ãªãã圢åŒçã«æ€èšŒãããæªæ¥ã蚪ããå¯èœæ§ããããŸãã
- ãã¡ã€ã³åºæã®åã®æšæºåïŒæ¥çãæçããã«ã€ããŠãäžè¬çãªããããæŠå¿µïŒäŸïŒ`Pose`ã`Twist`ã`Force`ã`JointState`ãªã©ã®åºæã®åäœèªèãæã€æšæºå®çŸ©ïŒã®ãã¡ã€ã³åºæã®åã®æšæºåãé²ã¿ãã°ããŒãã«ãªç°ãªããã³ããŒããã©ãããã©ãŒã éã§ã®çžäºéçšæ§ãç°¡çŽ åããããšã©ãŒãåæžãããã§ãããã
- AIãšæ©æ¢°åŠç¿ã®çµ±åïŒAIãšMLã³ã³ããŒãã³ããããããã®æææ±ºå®ã«äžå¯æ¬ ã«ãªãã«ã€ããŠãããŒã¿ãã€ãã©ã€ã³ãã¢ãã«ã®å ¥å/åºåãããã³å€å žçãªå¶åŸ¡ãœãããŠã§ã¢ãšåŠç¿ã·ã¹ãã éã®ã€ã³ã¿ãŒãã§ãŒã¹ã®æŽåæ§ã確ä¿ããããã«ãã¿ã€ãã»ãŒããã£ãéèŠã«ãªããŸããããã«ãããäžèŠåãŸãã¯å®å šã§ãªãAIé§åã®åäœã«ã€ãªããå¯èœæ§ã®ãã埮åŠãªãšã©ãŒãé²ãã®ã«åœ¹ç«ã¡ãŸãã
- æ€èšŒå¯èœãªå®å šæ§ãšã»ãã¥ãªãã£ãžã®æ³šåïŒã¿ã€ãã»ãŒããã£ã¯ãå®å šã§ã»ãã¥ã¢ãªã·ã¹ãã ãæ§ç¯ããããã®åºç€ã§ããããããããŸããŸãæ¥ç¶ããããµã€ããŒè åšã«å¯ŸããŠè匱ã«ãªãæä»£ã«ãããŠã匷åãªåã·ã¹ãã ã¯ãããããœãããŠã§ã¢å šäœã®å ç¢æ§ãšæ»æèæ§ã«è²¢ç®ããŸãã
çµè«
çã«èªåŸçã§ãæ®éçã«ä¿¡é Œã§ããæ¬è³ªçã«å®å šãªããããã·ã¹ãã ãžã®éã®ãã¯è€éã§ããããœãããŠã§ã¢å·¥åŠã«ãããŠæé«ã®åºæºãèŠæ±ããŸããå ç¢ãªåå®è£ ãéããã¿ã€ãã»ãŒããªããããå¶åŸ¡ã¯ããããã®èŠæ±ãæºããããã®åŒ·åã§å®èšŒæžã¿ã®æ¹æ³è«ãæäŸããŸãã匷åãªåã·ã¹ãã ãæ¡çšããææ ®æ·±ããã¡ã€ã³åºæã®åãèšèšãããã¹ããã©ã¯ãã£ã¹ãå°å ¥ããããšã§ããšã³ãžãã¢ã¯ãšã©ãŒãå€§å¹ ã«åæžããä¿¡é Œæ§ãé«ããä¿å®æ§ãåäžãããæçµçã«æ¬¡äžä»£ã®ã€ã³ããªãžã§ã³ããã·ã³ã®éçºãå éãããããšãã§ããŸãã
äžçäžã®ããããéçºè ããœãããŠã§ã¢ã¢ãŒããã¯ãããšã³ãžãã¢ãªã³ã°ãªãŒããŒã«ãšã£ãŠãã¿ã€ãã»ãŒããªå®è·µãžã®æè³ã¯åãªãæè¡çãªéžæã§ã¯ãããŸãããããã¯ããããããæ¯é¡ã®ãªã粟床ãäºæž¬å¯èœæ§ãå®å šæ§ã§åäœãããã¹ãŠã®ç£æ¥ãšå°åã§äººé¡ã«ç¢ºå®ã«è²¢ç®ããæªæ¥ãæ§ç¯ããããã®ã³ãããã¡ã³ãã§ãããããã£ã¯ã¹ã®èšãç¥ããªãå¯èœæ§ãããã¹ãŠã®äººã®å©çã®ããã«ã責任ãæã£ãŠå®å šã«å®çŸãããããšãä¿èšŒããããã®äžå¯æ¬ ãªäžæ©ã§ãã